package procesamiento;

import java.util.ArrayList;

import almacenamiento.Coordenada;
import almacenamiento.UtilidadesBaseDatos;
import almacenamiento.partida;
import almacenamiento.pruebas;

import com.example.proyectofc.Dtw;
import com.example.proyectofc.Utilidades;
import com.example.proyectofc.UtilidadesAcelerometro;
import com.example.proyectofc.juego;

public class utilidadesPartida{
	
//	 private static UtilidadesBaseDatos conexionBaseDatos = 
//			 juego.getConexion();
	 private static partida datosPartida = UtilidadesBaseDatos.
			 devolverPartida(Utilidades.getUsuarioJugador().getNombre());
	 
	 private static ArrayList<Double> patron = new ArrayList<Double>();
	 
	 static double resultado;

	public static boolean convertirIntBoolean(int valor) {
		boolean valorConvertido = false;
		
		if(valor == 1) {
			valorConvertido = true;
		}
		else valorConvertido = false;
		
		return valorConvertido;
	}
	
	public static int convertirBooleanInt(boolean valor) {
		int valorConvertido = 0;
		
		if(valor) valorConvertido = 1;
		else valorConvertido = 0;
		
		return valorConvertido;
	}
	
	public static partida getDatosPartida() {
		return datosPartida;
	}
	
	public static int devolverNivel() {
		return datosPartida.getNivel();
	}
	
	public static boolean esPartidaVacia() {
		if(datosPartida == null) {
			return true;
		}
		else return false;
	}
	
	public static void crearPartida(String nombreJugador) {
		UtilidadesBaseDatos.añadirPartida(nombreJugador);
		datosPartida = UtilidadesBaseDatos.devolverPartida(nombreJugador);
	}
	
	public static int devolverPorcentaje() {
		switch(datosPartida.getNivel()) {
		case 1:
			if (datosPartida.getnPrueba() == 0) return 0;
			else return 100;
		case 2:
			if (datosPartida.getnPrueba() == 1) return 0;
			else if (datosPartida.getnPrueba() == 2) return 50;
			else return 100;
		case 3:
			if (datosPartida.getnPrueba() == 3) return 0;
			else if (datosPartida.getnPrueba() == 4) return 33;
			else if (datosPartida.getnPrueba() == 5) return 66;
			else return 100;
		case 4: 
			if (datosPartida.getnPrueba() == 6) return 0;
			else if (datosPartida.getnPrueba() == 7) return 25;
			else if (datosPartida.getnPrueba() == 8) return 50;
			else if (datosPartida.getnPrueba() == 9) return 75;
			else return 100;
		case 5:
			if (datosPartida.getnPrueba() == 10) return 0;
			else if (datosPartida.getnPrueba() == 11) return 20;
			else if (datosPartida.getnPrueba() == 12) return 40;
			else if (datosPartida.getnPrueba() == 13) return 60;
			else if (datosPartida.getnPrueba() == 14) return 80;
			else return 100;
			
		default: 
			return 0;
		}	
	}
	
	public static float[] calcularPatronEscalado(float alt, float anch) {
		float[] patron = {1, 1};
		float altBase = 480;
		float anchBase = 320;
		
		patron[0] = alt/altBase;
		patron[1] = anch/anchBase;
		
		return patron;
	}
	
	public static void nombreJugadorActualizado(String nuevoNombre) {
		datosPartida = UtilidadesBaseDatos.devolverPartida(nuevoNombre);
	}
	
	public static String devolverEjercicio(int nPrueba) {
		return pruebas.devolverPrueba(nPrueba);
	}
	
	public static void actualizarPartida(String[] datos, String nombre) {
		UtilidadesBaseDatos.actualizarPartida(datos, nombre);
		
	}
	
	public static boolean manejarPruebaPar(int nPrueba) {
		ArrayList<Coordenada> datos = new ArrayList<Coordenada>();
		datos.addAll(juego.getRecorrido());
		return false;
	}
	
	public static boolean manejarPruebaImpar(int nPrueba) {
//		ArrayList<Coordenada> patron = new ArrayList<Coordenada>();
//		datos.addAll(juego.getRecorrido());
		
		// en función del numero de prueba llamar a un patron u otro, comparar 
//		y ver si es válido el resultado
		// o no
		patron = new ArrayList<Double>();
		UtilidadesAcelerometro.leerPatron(patron, 
				juego.direccionPatron(nPrueba));
		if (! patron.isEmpty() && ! juego.getRecorrido().isEmpty()) {
			
			ArrayList<Double> rec = new ArrayList<Double>(), 
					aux = new ArrayList<Double>();
			
//			for(int i = 0; i < patron.size(); i++) {
//	    		aux.add(patron.get(i).getX() + patron.get(i).getY() 
//	    				+ patron.get(i).getZ());
//	    	}
			
			rec.addAll(energiaLocalizada.eLocalizada(juego.getRecorrido()));
			Dtw set1 = new Dtw(patron, rec);
			resultado = set1.getDistancia(); 
		}
		
		if (resultado <= 1.0) return true;
		else return false;
	}	
}
